package ar.org.sstuyv

import grails.converters.JSON

import org.springframework.dao.DataIntegrityViolationException

import ar.org.sstuyv.planos.EstadoDelPlano
import ar.org.sstuyv.planos.Plano

class PlanoController {

//    static allowedMethods = [save: "POST", update: "POST", delete: "POST"]
	
	def springSecurityService
	
	def planoTEService

    def index() {
        redirect(action: "list", params: params)
    }

    def list(Integer max) {
        params.max = Math.min(max ?: 10, 100)
        [planoInstanceList: Plano.list(params), planoInstanceTotal: Plano.count()]
    }

    def create() {
        [planoInstance: new Plano(params)]
    }

//    def save() {
//        def planoInstance = new Plano(params)
//        if (!planoInstance.save(flush: true)) {
//            render(view: "create", model: [planoInstance: planoInstance])
//            return
//        }
//
//        flash.message = message(code: 'default.created.message', args: [message(code: 'plano.label', default: 'Plano'), planoInstance.id])
//        redirect(action: "show", id: planoInstance.id)
//    }

	def save = {
		def plano = new Plano()

		plano.setNumeroPlano(params.numeroPlano)
//		def cp = params.cantidadDeParcelasGeneradas
//		
//		def cp2 =  params.cantidadDeParcelasGeneradas
			
		Partido partido = Partido.findById(params.partido)
		plano.setPartido(partido)
		
		Barrio barrio = Barrio.findById(params.barrio)
		plano.setBarrio(barrio)
			
		// Listado de nomenclaturas generadas
		if(params.cantidadDeParcelasGeneradas != "") {
			plano.setCantidadDeParcelasGeneradas(params.cantidadDeParcelasGeneradas.toInteger())
		}
		
		plano.setObservaciones(params.observaciones)
		
		plano.setPoligono(params.poligono)
		
		if(params.nlegajoRegistroPropiedad != "") {
		plano.setNlegajoRegistroPropiedad(params.nlegajoRegistroPropiedad.toInteger())
		}
		
		plano.setNroPlanoOrigen(params.nroPlanoOrigen);
		
		plano.setNroPlanoDefinitivo(params.nroPlanoDefinitivo);
		
//		NomenclaturaCatastral ncp = NomenclaturaCatastral.findById(params.nomenclaturaProvisoriaId)
//		
//		plano.setNomenclaturaProvisoria(ncp)
//		
//		NomenclaturaCatastral ncd = NomenclaturaCatastral.findById(params.nomenclaturaDefinitivaId)
//		
//		plano.setNomenclaturaDefinitiva(ncd)
		
		EstadoDelPlano ep = EstadoDelPlano.findById(params.estado)
		plano.setEstado(ep)
		
		plano.setArchivoDWG("")
		
		
		//plano.setSolicitud( Solicitud.findByNumero(params.numeroSolicitud) )
		
		plano.save(failOnError:true)
		
		render ""
		
	}

    def show(Long id) {
        def planoInstance = Plano.get(id)
        if (!planoInstance) {
            flash.message = message(code: 'default.not.found.message', args: [message(code: 'plano.label', default: 'Plano'), id])
            redirect(action: "list")
            return
        }

        [planoInstance: planoInstance]
    }

    def edit = {
        def planoInstance = Plano.findById(params.id)
        if (!planoInstance) {
            flash.message = message(code: 'default.not.found.message', args: [message(code: 'plano.label', default: 'Plano'), id])
            //redirect(action: "list")
            return
        }

        [planoInstance: planoInstance]
    }

    def update =  {
        def plano = Plano.findById(params.id)
		plano.setNumeroPlano(params.numeroPlano)

		Partido partido = Partido.findById(params.partido)
		plano.setPartido(partido)
		
		Barrio barrio = Barrio.findById(params.barrio)
		plano.setBarrio(barrio)
		
		if(params.cantidadDeParcelasGeneradas != "") {
			plano.setCantidadDeParcelasGeneradas(params.cantidadDeParcelasGeneradas.toInteger())
		}
		
		plano.setObservaciones(params.observaciones)
		
		plano.setPoligono(params.poligono)
		
		if(params.nlegajoRegistroPropiedad != "") {
		plano.setNlegajoRegistroPropiedad(params.nlegajoRegistroPropiedad.toInteger())
		}
		
		plano.setNroPlanoOrigen(params.nroPlanoOrigen);
		
		plano.setNroPlanoDefinitivo(params.nroPlanoDefinitivo);
		
//		NomenclaturaCatastral ncp = NomenclaturaCatastral.findById(params.nomenclaturaProvisoriaId)
//		
//		plano.setNomenclaturaProvisoria(ncp)
//		
//		NomenclaturaCatastral ncd = NomenclaturaCatastral.findById(params.nomenclaturaDefinitivaId)
//		
//		plano.setNomenclaturaDefinitiva(ncd)
		
		EstadoDelPlano ep = EstadoDelPlano.findById(params.estado)
		plano.setEstado(ep)
		
		plano.setArchivoDWG("")
			
		//plano.setSolicitud( Solicitud.findByNumero(params.numeroSolicitud) )
		plano.save(failOnError:true)
		render ''
    }

	def delete = {
		def plano = Plano.findByNumeroPlano(params.id)
		if (plano) {
			try {
				plano.delete(flush: true)
				render "${message(code: 'default.deleted.message', args: [message(code: 'team.label', default: 'Team'), params.id])}"
			}
			catch (org.springframework.dao.DataIntegrityViolationException e) {
				render "${message(code: 'default.not.deleted.message', args: [message(code: 'team.label', default: 'Team'), params.id])}"
			}
		}
		else {
			render "${message(code: 'default.not.found.message', args: [message(code: 'team.label', default: 'Team'), params.id])}"
		}
	}
	
		def listJson = {
		
		def sortIndex = params.sidx ?: 'numeroPlano'
		def sortOrder  = params.sord ?: 'asc'
		def maxRows = Integer.valueOf(params.rows)
		def currentPage = Integer.valueOf(params.page) ?: 1
		def rowOffset = currentPage == 1 ? 0 : (currentPage - 1) * maxRows
		
		def plano = Plano.createCriteria().list(max: maxRows, offset: rowOffset) {
//			if (params.id) eq('id', params.id.toLong())
			//methods.eachWithIndex { method ->
				//if(params."$method") ilike(method, "%${params.$method}%")
				
				//print "%${params.$method}%"
			//}
			
//			if (params.numeroPlano) eq('numeroPlano', params.numeroPlano)
//			if (params.cantidadDeParcelasGeneradas) ilike('cantidadDeParcelasGeneradas', "%${params.cantidadDeParcelasGeneradas}%")
//			if (params.observaciones) ilike('observaciones', "%${params.observaciones}%")
//			if (params.archivoDWG) ilike('observaciones', "%${params.archivoDWG}%")
//			if (params.poligono) ilike('poligono', "%${params.poligono}%")
//			if (params.nlegajoRegistroPropiedad) ilike('nlegajoRegistroPropiedad', "%${params.nlegajoRegistroPropiedad}%")
//			if (params.estado) ilike('estado', "%${params.estado}%")
//			or{
//				notEqual('numeroPlano', '')
//			}
//			order(sortIndex, sortOrder)
		}
		
		def totalRows = plano.totalCount
		def numberOfPages = Math.ceil(totalRows / maxRows)
		
		def results = plano?.collect {
			[
				 cell: [ it.numeroPlano, it.partido?.nombre,
						it.barrio?.nombre, it.archivoDWG, it.nlegajoRegistroPropiedad, it.estado?.nombre,
						 it.cantidadDeParcelasGeneradas, it.nroPlanoOrigen, it.nroPlanoDefinitivo,
//						 it.nomenclaturaProvisoria?.spartido +' '+ it.nomenclaturaProvisoria?.circunscripcion +' '+ it.nomenclaturaProvisoria?.seccion +' '+
//						it.nomenclaturaProvisoria?.numeroChacra + it.nomenclaturaProvisoria?.letraChacra +' '+
//						it.nomenclaturaProvisoria?.numeroQuinta + it.nomenclaturaProvisoria?.letraQuinta +' '+
//						it.nomenclaturaProvisoria?.numeroFraccion + it.nomenclaturaProvisoria?.letraFraccion +' '+
//						it.nomenclaturaProvisoria?.numeroManzana + it.nomenclaturaProvisoria?.letraManzana + ' ' +
//						it.nomenclaturaProvisoria?.numeroParcela + it.nomenclaturaProvisoria?.letraParcela,
//						it.nomenclaturaProvisoria?.id,
//						it.nomenclaturaDefinitiva?.spartido +' '+ it.nomenclaturaDefinitiva?.circunscripcion +' '+ it.nomenclaturaDefinitiva?.seccion +' '+
//						it.nomenclaturaDefinitiva?.numeroChacra + it.nomenclaturaDefinitiva?.letraChacra +' '+
//						it.nomenclaturaDefinitiva?.numeroQuinta + it.nomenclaturaDefinitiva?.letraQuinta +' '+
//						it.nomenclaturaDefinitiva?.numeroFraccion + it.nomenclaturaDefinitiva?.letraFraccion +' '+
//						it.nomenclaturaDefinitiva?.numeroManzana + it.nomenclaturaDefinitiva?.letraManzana + ' ' +
//						it.nomenclaturaDefinitiva?.numeroParcela + it.nomenclaturaDefinitiva?.letraParcela,
//						it.nomenclaturaDefinitiva?.id,
						it.observaciones,
						 ],
				 id: it.id
			]
		}

		
		def jsonData = [rows: results, page: currentPage, records: totalRows, total: numberOfPages]
		render jsonData as JSON
	
	}

	
	def buscar = {
		
		Solicitud solicitud = Solicitud.findById(params.id)
		def plano = Plano.findAllBySolicitud(solicitud)
		
		def results = plano?.collect {
			[
				 cell: [it.numeroPlano, it.partido?.nombre,
						it.barrio?.nombre, it.archivoDWG, it.poligono, it.nlegajoRegistroPropiedad, it.estado?.nombre, 
					    it.cantidadDeParcelasGeneradas, it.nroPlanoOrigen, it.nroPlanoDefinitivo,
//					 	it.nomenclaturaProvisoria?.spartido +' '+ it.nomenclaturaProvisoria?.circunscripcion +' '+ it.nomenclaturaProvisoria?.seccion +' '+
//						it.nomenclaturaProvisoria?.numeroChacra + it.nomenclaturaProvisoria?.letraChacra +' '+
//						it.nomenclaturaProvisoria?.numeroQuinta + it.nomenclaturaProvisoria?.letraQuinta +' '+
//						it.nomenclaturaProvisoria?.numeroFraccion + it.nomenclaturaProvisoria?.letraFraccion +' '+
//						it.nomenclaturaProvisoria?.numeroManzana + it.nomenclaturaProvisoria?.letraManzana + ' ' +
//						it.nomenclaturaProvisoria?.numeroParcela + it.nomenclaturaProvisoria?.letraParcela,		 
//						it.nomenclaturaProvisoria?.id,
//						it.nomenclaturaDefinitiva?.spartido +' '+ it.nomenclaturaDefinitiva?.circunscripcion +' '+ it.nomenclaturaProvisoria?.seccion +' '+
//						it.nomenclaturaDefinitiva?.numeroChacra + it.nomenclaturaDefinitiva?.letraChacra +' '+
//						it.nomenclaturaDefinitiva?.numeroQuinta + it.nomenclaturaDefinitiva?.letraQuinta +' '+
//						it.nomenclaturaDefinitiva?.numeroFraccion + it.nomenclaturaDefinitiva?.letraFraccion +' '+
//						it.nomenclaturaDefinitiva?.numeroManzana + it.nomenclaturaDefinitiva?.letraManzana + ' ' +
//						it.nomenclaturaDefinitiva?.numeroParcela + it.nomenclaturaDefinitiva?.letraParcela,
//						it.nomenclaturaDefinitiva?.id,
						it.observaciones,
						],
				 id: it.id
			]
		}

		
		def jsonData = [rows: results]
		render jsonData as JSON
	}
	
	def fileSave =  {
			
			def uploadedFile = request.getFile('ARCHIVOIIUU')
			if (uploadedFile?.size > 0){
				User user = springSecurityService.getCurrentUser()
				
				def webRootDir = servletContext.getRealPath("/")
				Solicitud solicitud = Solicitud.findByNumero(params.numeroSolicitud?.toInteger())
				def userDir = new File(webRootDir, "/planos/" + user?.username + "/" + solicitud?.getNumero())
				userDir.mkdirs()
				uploadedFile.transferTo( new File( userDir, uploadedFile?.fileItem.fileName))
				Plano plano = Plano.findByNumeroPlano(params.numeroPlano.toString())
				plano.setArchivoDWG(uploadedFile.fileItem.fileName)
				plano.setSolicitud(solicitud)
				plano.save(failOnError:true)
			}
			render ''
	}
	
	
	def estadosPlano = {
		
		def lst = EstadoDelPlano.findAll()
		
			StringBuffer buf = new StringBuffer("<select>")
			buf.append("<option value=\"${-1}\">")
			buf.append("")
			lst.each{
				buf.append("<option value=\"${it.id}\">")
				buf.append(it.toString())
				buf.append("</option>")
			}
			buf.append("</select>")
		
			render buf.toString()
	}
	
	def getColumnas = {
		def data
		
		data = [/*colmodel: [
//							[ name:'id',index:'id', editable : true, width:70],
							[ name:'numeroPlano',index:'numeroPlano', editable : true, width:70],
							[ name:'partido',index:'partido', editable : true, width:70,edittype : "select",
								editoptions : [ 
									dataUrl : "/SIG/partido/listJson"
								]],
							[ name:'barrio',index:'barrio', editable : true, width:70,edittype : "select",
								editoptions : [	dataUrl : "/SIG/barrio/combolistJson"]],
							[ name: 'archivoDWG', index: 'archivoDWG', align: 'left', editable: true, edittype: 'file', editoptions: [ enctype: "multipart/form-data" ], width: 160,
							  align: 'center',search: false],
						    [ name:'nlegajoRegistroPropiedad', index:'nlegajoRegistroPropiedad', editable : true, width:100],
							[ name : 'estado', index : 'estado', width : 90, editable : true, edittype : "select", 
								editoptions : [ dataUrl : "/SIG/plano/estadosPlano"]],
							[name:'cantidadDeParcelasGeneradas', index:'cantidadDeParcelasGeneradas', editable : true, width:60],
							[name:'nroPlanoOrigen', index:'nroPlanoOrigen', editable : true, width:60],
							[name:'nroPlanoDefinitivo', index:'nroPlanoDefinitivo', editable : true, width:60],
//							[name:'nomenclaturaProvisoria', index:'nomenclaturaProvisoria', editable :true, width:60],
//							[name:'nomenclaturaProvisoriaId', index:'nomenclaturaProvisoriaId', editable : true, hidden:true],
//							[name:'nomenclaturaDefinitiva', index:'nomenclaturaDefinitiva', editable : true, width:60],
//							[name:'nomenclaturaDefinitivaId', index:'nomenclaturaDefinitivaId', editable : true, hidden:true],
							[ name:'observaciones', index:'observaciones', editable : true, width:160]],
			*/				

				colnames: ['Nro. de Plano', 'Partido', 'Barrio', 'Archivo DWG', 'Num. Leg. Reg. Prop.', 'Estado','Cantidad Parcelas Generadas', 'N plano Org.', 'Num. Plano Def.','Observaciones']
			];
		print data as JSON
		render data as JSON
		
	}
	
}
